package view;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Event;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import states.States;

import applikation.Fassade;

import domean.Kategorie;
import domean.Persistenz;
import domean.Spieler;
import domean.Spielfeld;
import domean.SpielfeldZelle;
import domean.Spielfigur;
import domean.Wissensstandsanzeiger;

public class GuiKomponenten extends JPanel implements MouseListener{


	private JButton wuerfelButton;
	private JButton kategorie1Button;
	private JButton kategorie2Button;
	private JButton kategorie3Button;
	private JButton kategorie4Button;

	private int radius = 220;
	private int zellgroese = 20;
	private int cellCount = 70;

	private SpielfeldZelle[] zellen;
	private Wissensstandsanzeiger[] anzeiger;
	private Spieler[] spieler;
	private JButton[] zellButtons;
	private JLabel[] spielerLabels;

	private static Fassade fassade;
	private Persistenz persistenz;

	private boolean dialogAngezeigt = false;

	public GuiKomponenten(final Persistenz persistenz, final Fassade fassade){
		setLayout(null);
		addMouseListener(this);

		this.fassade = fassade;
		this.persistenz = persistenz;
		zellen = persistenz.getSpielfeld().getZellen();
		zellButtons = new JButton[zellen.length];
		anzeiger = persistenz.getSpielfeld().getAnzeiger();
		spieler = persistenz.getSpielfeld().getSpieler();
		spielerLabels = persistenz.getSpielfeld().getSpielerLabels();

		ImageIcon wuerfelIcon = new ImageIcon("images/dado-wurfel_17-728090119.jpg");
		wuerfelIcon.setImage(wuerfelIcon.getImage().getScaledInstance(55,55,Image.SCALE_DEFAULT));
		wuerfelButton = new JButton();
		wuerfelButton.setSize(60, 60);
		wuerfelButton.setLocation(380, 240);
		wuerfelButton.setIcon(wuerfelIcon);
		add(wuerfelButton);
		wuerfelButton.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event) {
				fassade.wuerfeln();
			}
		});

		kategorie1Button = new JButton("<html>Kategroie I</html>");
		kategorie1Button.setSize(75, 100);
		kategorie1Button.setLocation(295, 165);
		kategorie1Button.setBackground(new Color(164, 189, 230));
		add(kategorie1Button);
		kategorie1Button.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event) {
				fassade.auswaehlenKategorie(0, persistenz.getAktuellerSpieler());
			}
		});

		kategorie2Button = new JButton("<html>Kategorie II</html>");
		kategorie2Button.setSize(75, 100);
		kategorie2Button.setLocation(450, 165);
		kategorie2Button.setBackground(new Color(254, 150, 147));
		add(kategorie2Button);
		kategorie2Button.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event) {
				fassade.auswaehlenKategorie(1, persistenz.getAktuellerSpieler());
			}
		});

		kategorie3Button = new JButton("<html>Kategorie III</html>");
		kategorie3Button.setSize(75, 100);
		kategorie3Button.setLocation(295, 275);
		kategorie3Button.setBackground(new Color(255, 255, 149));
		add(kategorie3Button);
		kategorie3Button.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event) {
				fassade.auswaehlenKategorie(2, persistenz.getAktuellerSpieler());
			}
		});

		kategorie4Button = new JButton("<html>Kategorie IV</html>");
		kategorie4Button.setSize(75, 100);
		kategorie4Button.setLocation(450, 275);
		kategorie4Button.setBackground(new Color(161, 226, 172));
		add(kategorie4Button);
		kategorie4Button.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event) {
				fassade.auswaehlenKategorie(3, persistenz.getAktuellerSpieler());
			}
		});		

		for(int i = 0; i <= (zellen.length-1); i++){
			zellButtons[i] = new JButton("");
			zellButtons[i].setSize(zellen[i].getZellenRadius(), zellen[i].getZellenRadius());
			zellButtons[i].setBackground(zellen[i].getFeldFarbe());
			zellButtons[i].setLocation(zellen[i].getXKoordinate(), zellen[i].getYKorrdiante());
			add(zellButtons[i]);
			this.setComponentZOrder(zellButtons[i], 0);
		}

		for(int i = 0; i < anzeiger.length; i++){
			add(anzeiger[i]);
			add(spieler[i]);
			this.setComponentZOrder(spieler[i], 1);
			add(spielerLabels[i]);
			this.setComponentZOrder(spielerLabels[i], 1);
		}
	}

	public void paintComponent(Graphics gr) {
		Graphics2D graphics  = (Graphics2D) gr;
		GradientPaint graytoGray = new GradientPaint(0, 0, Color.DARK_GRAY, 0, getSize().height,
				Color.LIGHT_GRAY);
		graphics.setPaint(graytoGray);
		graphics.fillRect(0, 0, getSize().width, getSize().height);

		graphics.setColor(new Color(164, 189, 230));
		graphics.fillOval(50 - zellgroese, 50 - zellgroese, zellgroese, zellgroese);
		graphics.fillOval(51 , 50 - zellgroese, zellgroese, zellgroese);
		graphics.fillOval(52 + zellgroese , 50 - zellgroese, zellgroese, zellgroese);

		graphics.setColor(new Color(254, 150, 147));
		graphics.fillOval(760 - zellgroese, 50 - zellgroese, zellgroese, zellgroese);
		graphics.fillOval(760 - zellgroese, 51 , zellgroese, zellgroese);
		graphics.fillOval(760 - zellgroese, 52 + zellgroese, zellgroese, zellgroese);

		graphics.setColor(new Color(255, 255, 149));
		graphics.fillOval(50 - zellgroese, 510 - zellgroese*2, zellgroese, zellgroese);
		graphics.fillOval(50 - zellgroese, 510 - zellgroese, zellgroese, zellgroese);
		graphics.fillOval(50 - zellgroese, 510, zellgroese, zellgroese);

		graphics.setColor(new Color(161, 226, 172));
		graphics.fillOval(760 - zellgroese*2, 510, zellgroese, zellgroese);
		graphics.fillOval(760 - zellgroese, 510, zellgroese, zellgroese);
		graphics.fillOval(760 - zellgroese*3, 510, zellgroese, zellgroese);
		
//		graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
//				RenderingHints.VALUE_ANTIALIAS_ON);
	}

	public void mouseClicked(MouseEvent arg0) {
	}

	public void mouseEntered(MouseEvent arg0) {
	}

	public void mouseExited(MouseEvent arg0) {
	}

	public void mousePressed(MouseEvent arg0) {
	}

	public void mouseReleased(MouseEvent arg0) {
	}
}
